package com.sh.data.engine.repository.dao.integration.api.http;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.sh.data.engine.repository.dao.integration.api.http.entity.ApiHttpEntity;

/**
 * @author : changkong
 * @date : 2022/3/15
 */
public interface ApiHttpMapper extends BaseMapper<ApiHttpEntity> {

//  public String findIdByXxlId(long xxlId) {
//    Query query = Query.query(Criteria.where("xxlJobId").is(xxlId).and("rowState").is("1"));
//    ApiHttpEntity one = findOne(query);
//    return null != one ? one.getId() : "";
//  }
//
//  public String existDumplicatedName(String projectId, String name) {
//    Query query =
//        Query.query(
//            Criteria.where("projectId")
//                .is(projectId)
//                .and("taskName")
//                .is(name)
//                .and("rowState")
//                .is("1"));
//    ApiHttpEntity one = findOne(query);
//    return null != one ? one.getId() : "";
//  }
//
//  /**
//   * 各个状态下的任务数量
//   *
//   * @param projectId
//   */
//  public List<TaskStatusOverviewEntity> getOverview(String projectId) {
//    List<AggregationOperation> aggregationOperationList = new ArrayList<>();
//    aggregationOperationList.add(
//        match(Criteria.where("projectId").is(projectId).and("rowState").is("1")));
//    aggregationOperationList.add(group("taskStatus").count().as("count"));
//    aggregationOperationList.add(project("count").and("taskStatus").previousOperation());
//    Aggregation aggregation = newAggregation(aggregationOperationList);
//    List<TaskStatusOverviewEntity> list =
//        mongoTemplate
//            .aggregate(aggregation, "apiHttp", TaskStatusOverviewEntity.class)
//            .getMappedResults();
//    return list;
//  }
//
//  /**
//   * 分页信息
//   *
//   * @param projectId
//   * @param pageNum
//   * @param pageSize
//   * @param taskStatus 任务状态
//   * @param search 查询条件
//   * @return
//   */
//  public FacetApiHttpUserEntityList getTaskListPageByTaskStatusAndSearchKey(
//      String projectId, Integer pageNum, Integer pageSize, int taskStatus, String search) {
//
//    Integer skipSize = (pageNum - 1) * pageSize;
//
//    Document idMapping = new Document("objectUserId", new Document("$toObjectId", "$creatorId"));
//    // 添加join关联字段
//    Document addFieldDocuments = new Document("$addFields", idMapping);
//    FacetOperation facetOperation =
//        new FacetOperation()
//            .and(Aggregation.count().as("total"))
//            .as("metadata")
//            .and(skip(skipSize.longValue()), limit(pageSize))
//            .as("data");
//
//    List<AggregationOperation> aggregationOperationList = new ArrayList<>();
//    // 筛选项目id和任务删除状态
//    Criteria firstMatch = Criteria.where("projectId").is(projectId).and("rowState").is("1");
//    if (taskStatus != -1) {
//      firstMatch.and("taskStatus").is(taskStatus);
//    }
//    aggregationOperationList.add(match(firstMatch));
//    aggregationOperationList.add(sort(Sort.Direction.DESC, "createTime"));
//    aggregationOperationList.add(aoc -> addFieldDocuments);
//    // 关联
//    aggregationOperationList.add(lookup("user", "objectUserId", "_id", "user"));
//    // 打平
//    aggregationOperationList.add(unwind("$user"));
//    // 正则查找
//    if (StringUtils.isNotBlank(search)) {
//      Criteria criteria = new Criteria();
//      aggregationOperationList.add(
//          match(
//              criteria.orOperator(
//                  Criteria.where("taskName").regex(search),
//                  Criteria.where("taskConfigParam.targetTableName").regex(search),
//                  Criteria.where("user.username").regex(search))));
//    }
//    // 转换成统计格式
//    aggregationOperationList.add(facetOperation);
//    Aggregation aggregation = newAggregation(aggregationOperationList);
//    List<FacetApiHttpUserEntityList> list =
//        mongoTemplate
//            .aggregate(aggregation, "apiHttp", FacetApiHttpUserEntityList.class)
//            .getMappedResults();
//    return list.get(0);
//  }
//
//  /**
//   * 更新并返回修改后的doc
//   *
//   * @param apiHttpEntity
//   * @return
//   */
//  public ApiHttpEntity findAndModify(ApiHttpEntity apiHttpEntity) {
//    Date now = new Date();
//    apiHttpEntity.setUpdateTime(now);
//    Query query = new Query(Criteria.where("_id").is(apiHttpEntity.getId()));
//    BeanMap beanMap = BeanMap.create(apiHttpEntity);
//    // 时间字段在这里被json了之后变成了数字文本
//    // org.bson.Document document = org.bson.Document.parse(new
//    // ObjectMapper().writeValueAsString(t));
//    Update update = new Update();
//    beanMap.forEach(
//        (k, v) -> {
//          if (null == v) {
//            return;
//          }
//
//          update.set(k.toString(), v);
//        });
//    return findAndModify(query, update, FindAndModifyOptions.options().returnNew(true));
//  }
}
